const path = require("path");
const webpack = require('webpack');

// const HtmlWebpackPlugin = require("html-webpack-plugin");
const HtmlWebpackExternalsPlugin = require('html-webpack-externals-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');


const isProduction = process.env.NODE_ENV === 'production';


// 生成格式为 "YYYY_MM_DD_HH_mm_ss" 的时间戳
function formatTime() {
    const date = new Date();
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始，需+1并补0
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    return `${year}_${month}_${day}_${hours}_${minutes}_${seconds}`;
}

module.exports = {
    mode: "production",
    entry: "./src/index.js",
    output: {

        filename: `cnbook.js`,
        chunkFilename: `cnbook.chunk.js`, // 分割的chunk文件
        path: path.resolve(__dirname, "dist"),
        clean: true,
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: `cnbook.css`,
            chunkFilename: `cnbook.chunk.css`, // 分割的chunk文件
        })
    ],
    module: {
        rules: [
            {
                test: /\.css$/i,
                use: [
                    //isProduction ? MiniCssExtractPlugin.loader : 'style-loader', // 生产环境提取，开发环境注入 JS
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                    // 'style-loader', // 第二步：将 CSS 注入到 JS 中（运行时生成 <style> 标签）
                    // 'css-loader'    // 第一步：解析 CSS 文件
                ]
            }
        ],
    },
    resolve: {
        alias: {
            '@': path.resolve('src'),
            '@modules': path.resolve('src/modules'),
            '@consts': path.resolve('src/consts')
        },
    },

    optimization: {
        minimizer: [
            // 压缩 CSS（需放在 minimizer 数组中，确保覆盖默认配置）
            new CssMinimizerPlugin(),
            // 如果需要压缩 JS，需手动添加 Terser（Webpack5 生产环境默认包含）
            '...' // 保留默认的 JS 压缩器
        ]
    }
};